home *** CD-ROM | disk | FTP | other *** search
/ PC/CD Gamer UK 129 / CD Gamer Issue 129 (December 2003) (Disc 1).ISO / Addons / Vietcong Map editor / max plugins / scripts / pteroTools / _physicsRollOut.msp < prev    next >
Encoding:
Text File  |  2003-09-12  |  6.5 KB  |  133 lines

  1. rollout PhysicsRollOut "Physics" rolledUp:true (
  2.     local _name
  3.     local _RollOut
  4.  
  5.     ---------------------------------------------------------------
  6.     -- init GUI
  7.     ---------------------------------------------------------------
  8.     include "$scripts\\pteroTools\\_propGroupUI.ms"
  9.         spinner            spnWeight    "Weight:"            range:[0, 65535, 0]    type:#float        FieldWidth:50    offset:[-20,0]    align:#right
  10.         spinner            spnDensity    "Density:"            range:[0, 65535, 0]    type:#float        FieldWidth:50    offset:[-20,0]    align:#right
  11.         spinner            spnInertia    "MoI:"                range:[0, 65535, 0]    type:#float        FieldWidth:50    offset:[-20,0]    align:#right
  12.         checkbox        cbxDefMoi    "Default Moment of Inertia"                                                                align:#left
  13.         dropdownlist    drpStatus    "Type:"                                                    width:144        height:7        align:#center
  14.  
  15.      ---------------------------------------------------------------
  16.     -- Init RollOut
  17.     ---------------------------------------------------------------
  18.      fn fnKeyNames    = #( "Phy_weight", "Phy_density", "Phy_moment", "Phy_status" )
  19.      fn fnKeyUI        = #( #( spnWeight ), #( spnDensity ), #( spnInertia ), #( drpStatus ) )
  20.      fn fnKeyDef        = #( #( 0 ), #( 0 ), #( 0 ), #( -1 ) )
  21.     fn fnName        = "Physics"
  22.     fn fnRollOut    = PhysicsRollOut
  23.     fn fnInitRollOut = (
  24.         local _name        = fnName()
  25.         local _RollOut    = fnRollOut()
  26.         fnAppendRollOut _RollOut _name
  27.     )
  28.      
  29.      ---------------------------------------------------------------
  30.     -- fnApply()
  31.     ---------------------------------------------------------------
  32.     fn fnApply obj keyIDX read write del acq acqObj def sav = (
  33.         local keyNames    = fnKeyNames()
  34.         local keyUI        = fnKeyUI()
  35.         local keyDef    = fnKeyDef()
  36.         local keyArray    = #()
  37.  
  38.         fn fnFindMat val keyUI:keyUI keyIDX:keyIDX =                                                             ---- FN FIND MATERIAL
  39.             for n = 1 to (keyUI[keyIDX][1].items).count do
  40.                 if (subString keyUI[keyIDX][1].items[n] 1 2) == val do return n
  41.                 
  42.         if sav do                                                                                                 ---- SAVE DEFAULT
  43.             try (
  44.                 if keyIDX <= 3 do keyDef[keyIDX][1] = keyUI[keyIDX][1].value
  45.                 if keyIDX == 4 do keyDef[keyIDX][1] = keyUI[keyIDX][1].selection - 2
  46.                 fnSetDefs ( keyNames[keyIDX] as string ) ( keyDef[keyIDX] as string )
  47.                 return true
  48.             ) catch ( print ( "Error: " + _name + ".fnApply() - save" ); return false )
  49.  
  50.         if del do fnDeleteProp obj keyNames[keyIDX]                                                                ---- DELETE
  51.         
  52.         keyArray = if acq then fnReadProp acqObj keyNames[keyIDX] else fnReadProp obj keyNames[keyIDX]            ---- ACQUIRE
  53.         
  54.         if read or del or def or acq do (                                                                        ---- READ
  55.             if ( keyArray[_firstValue] == "" ) or ( keyArray[_firstValue] as string == "undefined" ) or def then 
  56.                 try (
  57.                     if def then keyDef[keyIDX] = fnGetDefs keyNames[keyIDX]
  58.                     if keyIDX <= 3 do keyUI[keyIDX][1].value        = keyDef[keyIDX][1]
  59.                     if keyIDX == 4 do keyUI[keyIDX][1].selection    = keyDef[keyIDX][1] + 2
  60.                 ) catch ( print ( "Error: " + _name + ".fnApply() - read - default" ); return false )
  61.             else 
  62.                 try (
  63.                     if keyIDX <= 3 do keyUI[keyIDX][1].value        = keyArray[_firstValue] as float
  64.                     if keyIDX == 4 do keyUI[keyIDX][1].selection    = keyArray[_firstValue] as integer + 2
  65.                 ) catch ( print ( "Error: " + _name + ".fnApply() - read - properties" ); return false )
  66.             cbxDefMoi.checked = if ( spnWeight.value * 2 ) == spnInertia.value then true else false
  67.             spnInertia.enabled = not cbxDefMoi.checked
  68.             
  69.             if read or del do return true
  70.         )
  71.  
  72.         if write do                                                                                             ---- WRITE
  73.             try (
  74.                 keyArray[_keyName] = keyNames[keyIDX]
  75.                 if keyIDX <= 3 do if keyUI[keyIDX][1].value == 0            then del = true else keyArray[_firstValue] = keyUI[keyIDX][1].value as string
  76.                 if keyIDX == 4 do if keyUI[keyIDX][1].selection == 1        then del = true else keyArray[_firstValue] = ( keyUI[keyIDX][1].selection - 2 ) as string
  77.  
  78.                 if del then fnDeleteProp obj keyNames[keyIDX] else fnWriteprop obj keyArray
  79.                 return true
  80.             ) catch ( print ( "Error: " + _name + ".fnApply() - write" ); return false )
  81.     )
  82.     
  83.      ---------------------------------------------------------------
  84.     -- fnUpdate()
  85.     ---------------------------------------------------------------
  86.     fn fnUpdate keyIDX:1 read:false write:false del:false acq:false acqObj:undefined def:false sav:false = (
  87.         if not write do write = btnAuto.checked
  88.         for obj in selection do fnApply obj keyIDX read write del acq acqObj def sav
  89.     )
  90.  
  91.      ---------------------------------------------------------------
  92.     -- fnWeight()
  93.     ---------------------------------------------------------------
  94.     fn fnWeight value = (
  95.         if cbxDefMoi.checked do (
  96.             spnInertia.value = spnWeight.value * 2
  97.             fnUpdate keyIDX:3
  98.         )
  99.         fnUpdate keyIDX:1
  100.     )
  101.  
  102.      ---------------------------------------------------------------
  103.     -- fnDefMoi()
  104.     ---------------------------------------------------------------
  105.     fn fnDefMoi state = (
  106.         spnInertia.enabled    = not state
  107.         spnInertia.value    = spnWeight.value * 2
  108.         fnUpdate keyIDX:3
  109.     )
  110.     
  111.     ---------------------------------------------------------------
  112.     -- Event Handler
  113.     ---------------------------------------------------------------
  114.     on spnWeight        changed value    do ( fnWeight value; fnGetPropsToShow(); fnPrintLabel() )
  115.     on spnDensity        changed value    do ( fnUpdate keyIDX:2; fnGetPropsToShow(); fnPrintLabel() )
  116.     on spnInertia        changed value    do ( fnUpdate keyIDX:3 del:(if value > 0 then false else true); fnGetPropsToShow(); fnPrintLabel() )
  117.     on cbxDefMoi        changed state    do ( fnDefMoi state; fnGetPropsToShow(); fnPrintLabel() )
  118.     on drpStatus        selected item    do ( fnUpdate keyIDX:4; fnGetPropsToShow(); fnPrintLabel() )
  119.     on btnSet            pressed            do ( for n = 1 to (fnKeyNames()).count do fnUpdate keyIDX:n write:true; fnGetPropsToShow(); fnPrintLabel() )
  120.     on btnDef            pressed            do ( for n = 1 to (fnKeyNames()).count do fnUpdate keyIDX:n def:true; fnGetPropsToShow(); fnPrintLabel() )
  121.     on btnSav            pressed            do ( for n = 1 to (fnKeyNames()).count do fnUpdate keyIDX:n sav:true; fnGetPropsToShow(); fnPrintLabel() )
  122.     on btnDel            pressed            do ( for n = 1 to (fnKeyNames()).count do fnUpdate keyIDX:n del:true; fnGetPropsToShow(); fnPrintLabel() )
  123.     on btnAcq            changed state    do ( fnAcquire _RollOut keys:(fnKeyNames()).count; fnGetPropsToShow(); fnPrintLabel() )
  124.     on PhysicsRollOut    open            do (
  125.         _RollOut            = fnRollOut()
  126.         _name                = fnName()
  127. -- TODO: zjistit jak to je doopravdy s 'Trash' Status
  128.         drpStatus.items        = #("- None -", "+ Collision, - Synchronize", "+ Collision, + Synchronize", "Trash, + Collide w/t Player/AI", "Trash, - Collide P/AI, - Synch.")
  129.         fnOpenRollOut _RollOut keys:(fnKeyNames()).count
  130.     )
  131.     on PhysicsRollOut    close            do fnCloseRollOut _RollOut
  132. )
  133.